#ifndef XTMOTIONELEMENTFACTORY_H
#define XTMOTIONELEMENTFACTORY_H

#include "BasicElement/basicelementfactory.h"
#include "motionelementdefinition.h"
#include "xtaxis.h"
#include "xtcontrolcard.h"
#include "xtdi.h"
#include "xtdispenser.h"
#include "xtdo.h"
#include "xtvcm.h"

class XtMotionElementFactory : public QObject, public BasicElementFactory
{
    Q_OBJECT

public:
    XtMotionElementFactory();

    Q_INVOKABLE void showVcmDebugDlg();

    // BasicElementFactory interface
public:
    virtual SCAxis *createAxis(QString name, QString axisType, QObject *parent) override;
    virtual SCDI *createDI(QString name, QObject *parent) override;
    virtual SCDO *createDO(QString name, QObject *parent) override;
    virtual ControlCard *createControlCard() override;
    virtual AxisConfig *createAxisConfig(QString axisType, QObject *parent) override;
    virtual const QMetaObject *vcmConfigMetaObje() const override;
    virtual const QMetaObject *axisConfigMetaObj() const override;
    virtual SCDispenser *
    createDispenser(const QLoggingCategory &logCate, DispenserConfig *dispenserConfig, QObject *parent) override;
};

#endif    // XTMOTIONELEMENTFACTORY_H
